home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / incl / LEDA.020+881 / array.h < prev    next >
C/C++ Source or Header  |  1994-08-05  |  3KB  |  114 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  array.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef LEDA_ARRAY_H
  16. #define LEDA_ARRAY_H
  17.  
  18. //------------------------------------------------------------------------------
  19. // arrays
  20. //------------------------------------------------------------------------------
  21.  
  22. #include <LEDA/impl/gen_array.h>
  23.  
  24. #if defined(LEDA_CHECKING_OFF)
  25. #define ARRAY_ACCESS(type)\
  26. type& operator[](int x)       { return ACCESS(type,v[x-Low]); }\
  27. type  operator[](int x) const { return ACCESS(type,v[x-Low]); }
  28. #else
  29. #define ARRAY_ACCESS(type)\
  30. type& operator[](int x)       { return ACCESS(type,(GenPtr&)entry(x));}\
  31. type  operator[](int x) const { return ACCESS(type,inf(x));}
  32. #endif
  33.  
  34.  
  35.  
  36. template<class type> 
  37.  
  38. class _CLASSTYPE array : public gen_array {
  39.  
  40. type X;
  41.  
  42. int cmp(GenPtr x, GenPtr y) const
  43.                         { return compare(ACCESS(type,x),ACCESS(type,y)); }
  44. void print_el(GenPtr& x,ostream& out) const { Print(ACCESS(type,x),out);}
  45. void read_el(GenPtr& x,istream& in)         { Read(X,in); x = Copy(X); }
  46. void clear_entry(GenPtr& x)  { Clear(ACCESS(type,x)); }
  47. void copy_entry(GenPtr& x)   { x = Copy(ACCESS(type,x));  }
  48. void init_entry(GenPtr& x)   { Init(X); x = Copy(X); }
  49.  
  50. int  int_type() const { return INT_TYPE(type); }
  51.  
  52. public:
  53. array()  {}
  54. array(int n)                : gen_array(n)   { init(); }
  55. array(int a, int b)         : gen_array(a,b) { init(); }
  56. array(const array<type>& A) : gen_array(A)   {}
  57. ~array()  { clear(); }
  58.  
  59. array<type>& operator=(const array<type>& A) 
  60. { return (array<type>&) gen_array::operator=(A); }
  61.  
  62. ARRAY_ACCESS(type)
  63.  
  64. void sort(int (*f)(const type&,const type&)) 
  65. { gen_array::sort(low(),high(),CMP_PTR(f));}
  66.  
  67. void sort(int (*f)(const type&,const type&), int l, int h)
  68. { gen_array::sort(l,h,CMP_PTR(f)); }
  69.  
  70. void sort()                      { gen_array::sort(low(),high(),0); }
  71. void sort(int l, int h)          { gen_array::sort(l,h,0); }
  72.  
  73. int binary_search(int (*f)(const type&,const type&), type x)
  74.                { return gen_array::binary_search(Convert(x),CMP_PTR(f));}
  75. int binary_search(type x)   
  76. { return (int_type()) ? gen_array::int_binary_search(Convert(x))
  77.                       : gen_array::binary_search(Convert(x));
  78.  }
  79.  
  80. };
  81.  
  82.  
  83.  
  84. /*------------------------------------------------------------------------*/
  85. /* 2 dimensional arrays                                                   */
  86. /*------------------------------------------------------------------------*/
  87.  
  88.  
  89. template<class type> 
  90.  
  91. class _CLASSTYPE array2 : public gen_array2 {
  92.  
  93. type X;
  94.  
  95. void clear_entry(GenPtr& x) { Clear(ACCESS(type,x)); }
  96. void copy_entry(GenPtr& x)  { x = Copy(ACCESS(type,x));  }
  97. void init_entry(GenPtr& x)  { Init(X); x = Copy(X); }
  98.  
  99. public:
  100.  
  101. type& operator()(int i, int j)       { return ACCESS(type,row(i)->entry(j)); }
  102. /*
  103. type  operator()(int i, int j) const { return ACCESS(type,row(i)->entry(j)); }
  104. */
  105.  
  106.  array2(int a,int b,int c,int d) :gen_array2(a,b,c,d){ init(a,b,c,d);}
  107.  array2(int n,int m)             :gen_array2(n,m)    { init(0,n-1,0,m-1);}
  108. ~array2() { clear(); }
  109. };
  110.  
  111.  
  112. #endif
  113.